package com.qf.jdbc_demo;

import java.sql.*;

/**
 * @author 高圆圆
 * @date 2022/10/9 15:26
 */
//回忆原生Jdbc的操作步骤

/**
 * 原生jdbc的弊端频繁创
 *  1)sql语句 以及参数 都是属于硬编码
 *  2)一个用户进来需要创建连接对象---高并发场景下  连接对象建---消耗资源严重!
                并行: 时间段



            为了解决这种问题---->高并发场景下 ---->Hibernate    全自动的映射框架(针对单表操作:crud 更推荐)
                举例
                        接口----->findAllXXX()----->自动的完成 单表查询

            Mybatis:ORM框架(关系映射框架)---不仅提供单表---
 还可以提供多表关系进行操作,支持高并发场景(自带连接池POOLED)
                        框架---也会使用到大量的设计模式以及核心配置文件
                这些框架都是针对原生JDBC的优化:一堆通用代码+核心配置文件 (半成品的东西)


                        插件
            Apache--->commons-dbutils:-----jdbc工具类库(针对jdbc封装)----->利用反射或者java设计模式对代码进行扩展



  */
public class JdbcTest {
    public static void main(String[] args) {

        Connection conn = null ;
        PreparedStatement stmt  = null ;
        ResultSet rs = null ;
        try {
            //1)导包 :驱动包
            //2)注册驱动
            Class.forName("com.mysql.jdbc.Driver") ;
            //3)准备sql语句
            String sql = "select * from teacher" ;
            //String sql = "update teacher set tea_name = ?,age =?,gender = ? where id =?";

            //4)获取连接对象
            conn = DriverManager.getConnection(
                    "jdbc:mysql://localhost:3306/mybatis_01",
                    "root",
                    "123456"
            );
            //5)通过连接对象获取执行对象  Statement---推荐 PreparedStatement
             stmt = conn.prepareStatement(sql) ; //将预编译sql发送给数据库
            //直接执行查询操作----->将查询的结果存储在ResultSet:数据表的结果值
             rs = stmt.executeQuery();
            //查询每一条数据---展示控制台上
            while(rs.next()){
                //要么通过 列的名称获取/ 通过列的索引值获取  第一列就是1
                int id = rs.getInt("id");
                String tea_name = rs.getString("tea_name");
                String gender = rs.getString("gender");
                int age = rs.getInt("age");
                String address = rs.getString("address");
                System.out.println(id+"---"+tea_name+"---"+gender+"---"+age+"---"+address);
            }
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        } finally {
            if(rs!=null){
                try {
                    rs.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(stmt!=null){
                try {
                    stmt.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
            if(conn!=null){
                try {
                    conn.close();
                } catch (SQLException throwables) {
                    throwables.printStackTrace();
                }
            }
        }
    }
}
